// Package dao
// @Author zhongxc
// @Date 2024/7/24 11:00:00
// @Desc
package dao

import (
	"context"
	"fmt"
	"gorm.io/gorm"
	"vben-admin/pkg/dao/internal"
	"vben-admin/pkg/model"
	"vben-common/msdb"
	"vben-common/msdb/gorms"
)

type RoleMenuDao struct {
	conn    *gorms.GormConn
	columns *internal.RoleMenuColumns
}

func (r *RoleMenuDao) getSession(ctx context.Context) *gorm.DB {
	return r.conn.Session(ctx)
}

func NewRoleMenuDao(db *msdb.MsDB) *RoleMenuDao {
	return &RoleMenuDao{
		conn:    gorms.New(db.Conn),
		columns: internal.NewRoleMenuColumns(),
	}
}

// CreateRoleMenu
// @Description: 角色和菜单关联
// @receiver r
// @param ctx
// @param roleMenu
// @return error
func (r *RoleMenuDao) CreateRoleMenu(ctx context.Context, roleMenu []*model.RoleMenuModel) error {
	if len(roleMenu) == 0 {
		return nil
	}
	err := r.getSession(ctx).Create(roleMenu).Error
	return err
}

// DeleteRoleMenuByRoleId
// @Description: 删除角色和菜单关联
// @receiver r
// @param ctx
// @param roleId
// @return error
func (r *RoleMenuDao) DeleteRoleMenuByRoleId(ctx context.Context, roleId []int64) error {
	err := r.getSession(ctx).
		Where(fmt.Sprintf("%s IN ?", r.columns.RoleId), roleId).
		Delete(&model.RoleMenuModel{}).
		Error
	return err
}
